/*
 * Copyright 2023, Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 */

#ifndef LS7A2000_REGISTERS_H
#define LS7A2000_REGISTERS_H

// 龙芯7A2000 GPU寄存器定义

// 基本配置寄存器
#define LS7A_CONFIG_REG_BASE       0x00000000
#define LS7A_CHIP_CONFIG           (LS7A_CONFIG_REG_BASE + 0x0000)  // 芯片配置寄存器
#define LS7A_VERSION_ID            (LS7A_CONFIG_REG_BASE + 0x0004)  // 版本ID寄存器
#define LS7A_INTERRUPT_ENABLE      (LS7A_CONFIG_REG_BASE + 0x0008)  // 中断使能寄存器
#define LS7A_INTERRUPT_STATUS      (LS7A_CONFIG_REG_BASE + 0x000C)  // 中断状态寄存器

// 显示控制器寄存器
#define LS7A_DISPLAY_REG_BASE      0x00010000
#define LS7A_DISPLAY_CTRL          (LS7A_DISPLAY_REG_BASE + 0x0000)  // 显示控制寄存器
#define LS7A_DISPLAY_STATUS        (LS7A_DISPLAY_REG_BASE + 0x0004)  // 显示状态寄存器
#define LS7A_DISPLAY_ADDR          (LS7A_DISPLAY_REG_BASE + 0x0008)  // 显示帧缓冲地址寄存器
#define LS7A_DISPLAY_STRIDE        (LS7A_DISPLAY_REG_BASE + 0x000C)  // 显示行跨度寄存器
#define LS7A_DISPLAY_WIDTH         (LS7A_DISPLAY_REG_BASE + 0x0010)  // 显示宽度寄存器
#define LS7A_DISPLAY_HEIGHT        (LS7A_DISPLAY_REG_BASE + 0x0014)  // 显示高度寄存器
#define LS7A_DISPLAY_FORMAT        (LS7A_DISPLAY_REG_BASE + 0x0018)  // 显示格式寄存器

// 光标控制寄存器
#define LS7A_CURSOR_REG_BASE       0x00020000
#define LS7A_CURSOR_CONTROL        (LS7A_CURSOR_REG_BASE + 0x0000)  // 光标控制寄存器
#define LS7A_CURSOR_POS            (LS7A_CURSOR_REG_BASE + 0x0004)  // 光标位置寄存器
#define LS7A_CURSOR_ADDR           (LS7A_CURSOR_REG_BASE + 0x0008)  // 光标图像地址寄存器
#define LS7A_CURSOR_BACK           (LS7A_CURSOR_REG_BASE + 0x000C)  // 光标背景色寄存器
#define LS7A_CURSOR_FORE           (LS7A_CURSOR_REG_BASE + 0x0010)  // 光标前景色寄存器

// 光标控制寄存器位定义
#define LS7A_CURSOR_ENABLE         0x00000001  // 光标使能位
#define LS7A_CURSOR_FORMAT_MASK    0x00000030  // 光标格式掩码
#define LS7A_CURSOR_FORMAT_ARGB32  0x00000000  // ARGB32格式
#define LS7A_CURSOR_FORMAT_MONO    0x00000010  // 单色格式

// PLL控制寄存器
#define LS7A_PLL_REG_BASE          0x00030000
#define LS7A_PLL_CTRL              (LS7A_PLL_REG_BASE + 0x0000)  // PLL控制寄存器
#define LS7A_PLL_DIV               (LS7A_PLL_REG_BASE + 0x0004)  // PLL分频寄存器
#define LS7A_PLL_STATUS            (LS7A_PLL_REG_BASE + 0x0008)  // PLL状态寄存器

// HDMI控制寄存器
#define LS7A_HDMI_REG_BASE         0x00040000
#define LS7A_HDMI_CTRL             (LS7A_HDMI_REG_BASE + 0x0000)  // HDMI控制寄存器
#define LS7A_HDMI_STATUS           (LS7A_HDMI_REG_BASE + 0x0004)  // HDMI状态寄存器
#define LS7A_HDMI_AUDIO_CTRL       (LS7A_HDMI_REG_BASE + 0x0008)  // HDMI音频控制寄存器

// EDID寄存器
#define LS7A_EDID_REG_BASE         0x00050000
#define LS7A_EDID_CTRL             (LS7A_EDID_REG_BASE + 0x0000)  // EDID控制寄存器
#define LS7A_EDID_STATUS           (LS7A_EDID_REG_BASE + 0x0004)  // EDID状态寄存器
#define LS7A_EDID_DATA             (LS7A_EDID_REG_BASE + 0x0008)  // EDID数据寄存器

// 电源管理寄存器
#define LS7A_POWER_REG_BASE        0x00060000
#define LS7A_POWER_CTRL            (LS7A_POWER_REG_BASE + 0x0000)  // 电源控制寄存器
#define LS7A_POWER_STATUS          (LS7A_POWER_REG_BASE + 0x0004)  // 电源状态寄存器

#endif // LS7A2000_REGISTERS_H